package com.base.dataStructure.recurrence;

import java.util.LinkedList;

/**
 * @Author: hdhao
 * @Create: 2023/3/29 - 20:29
 * @Version: v1.0
 */
public class HanoiTower {
    static LinkedList<Integer> a = new LinkedList<>();
    static LinkedList<Integer> b = new LinkedList<>();
    static LinkedList<Integer> c = new LinkedList<>();

    static void init(int n){
        for (int i = n;i>=1;i--){
            a.addLast(i);
        }
    }

    /**
     *
     * @param n 圆盘个数
     * @param a 源柱子
     * @param b 工具柱子
     * @param c 目标柱子
     */
    static void move(int n,LinkedList<Integer> a,LinkedList<Integer> b,LinkedList<Integer> c){
        if (n == 0){
            return;
        }
        move(n-1,a,c,b);
        c.addLast(a.removeLast());
        print();
        move(n-1,b,a,c);
    }
    public static void main(String[] args) {
        init(3);
        print();
        move(3,a,b,c);
    }

    private static void print() {
        System.out.println("------------");
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}
